package woaini.fenger.bots.opq.dto;

import java.io.Serializable;
import java.util.List;

import com.alibaba.fastjson2.annotation.JSONField;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * OPQ%ws响应
 *
 * @see OpqResponse
 * @author yefeng {@code @Date} 2023-05-16 16:50:39
 */
@NoArgsConstructor
@Data
public class OpqResponse implements Serializable {

  /**
   * @see MsgHead 消息头
   */
  @JSONField(name = "MsgHead")
  private MsgHead MsgHead;

  /**
   * @see MsgBody 消息身躯
   */
  @JSONField(name = "MsgBody")
  private MsgBody MsgBody;

  /**
   * @see Object 活动
   */
  @JSONField(name = "Event")
  private Object Event;

  @NoArgsConstructor
  @Data
  public static class MsgHead implements Serializable {
    /**
     * @see Long 发自uin
     */
    @JSONField(name = "FromUin")
    private Long FromUin;

    /**
     * @see String 从uid
     */
    @JSONField(name = "FromUid")
    private String FromUid;

    /**
     * @see Long 要执行以下操作
     */
    @JSONField(name = "ToUin")
    private Long ToUin;

    /**
     * @see String 到UID
     */
    @JSONField(name = "ToUid")
    private String ToUid;

    /**
     * @see Integer From类型
     */
    @JSONField(name = "FromType")
    private Integer FromType;

    /**
     * @see Long 发件人uin
     */
    @JSONField(name = "SenderUin")
    private Long SenderUin;

    /**
     * @see String 发件人UID
     */
    @JSONField(name = "SenderUid")
    private String SenderUid;

    /**
     * @see String 发件人尼克
     */
    @JSONField(name = "SenderNick")
    private String SenderNick;

    /**
     * @see Integer 消息类型
     */
    @JSONField(name = "MsgType")
    private Integer MsgType;

    /**
     * @see Integer C2c cmd
     */
    @JSONField(name = "C2cCmd")
    private Integer C2cCmd;

    /**
     * @see Integer 消息序列号
     */
    @JSONField(name = "MsgSeq")
    private Integer MsgSeq;

    /**
     * @see Integer 消息时间
     */
    @JSONField(name = "MsgTime")
    private Integer MsgTime;

    /**
     * @see Integer 消息随机
     */
    @JSONField(name = "MsgRandom")
    private Integer MsgRandom;

    /**
     * @see Long 消息UID
     */
    @JSONField(name = "MsgUid")
    private Long MsgUid;

    /**
     * @see GroupInfo 群信息
     */
    @JSONField(name = "GroupInfo")
    private GroupInfo GroupInfo;

    /**
     * @see Object C2 ctemp消息头
     */
    @JSONField(name = "C2CTempMessageHead")
    private Object C2CTempMessageHead;

    @NoArgsConstructor
    @Data
    public static class GroupInfo implements Serializable {
      /**
       * @see String 组卡
       */
      @JSONField(name = "GroupCard")
      private String GroupCard;

      /**
       * @see Integer 组码
       */
      @JSONField(name = "GroupCode")
      private Integer GroupCode;

      /**
       * @see Integer 组信息序号
       */
      @JSONField(name = "GroupInfoSeq")
      private Integer GroupInfoSeq;

      /**
       * @see Integer 集团级别
       */
      @JSONField(name = "GroupLevel")
      private Integer GroupLevel;

      /**
       * @see Integer 团体排名
       */
      @JSONField(name = "GroupRank")
      private Integer GroupRank;

      /**
       * @see Integer 群组类型
       */
      @JSONField(name = "GroupType")
      private Integer GroupType;

      /**
       * @see String 组名称
       */
      @JSONField(name = "GroupName")
      private String GroupName;
    }
  }

  @NoArgsConstructor
  @Data
  public static class MsgBody implements Serializable {
    /**
     * @see Integer SUB消息类型
     */
    @JSONField(name = "SubMsgType")
    private Integer SubMsgType;

    /**
     * @see String 内容
     */
    @JSONField(name = "Content")
    private String Content;

    /**
     * @see Object 在UIN列表中
     */
    @JSONField(name = "AtUinLists")
    private List<OpqAtUinList> AtUinLists;

    /**
     * @see Object 视频
     */
    @JSONField(name = "Video")
    private Object Video;

    /**
     * @see Object 声音
     */
    @JSONField(name = "Voice")
    private Object Voice;

    /**
     * @see Object 红包
     */
    @JSONField(name = "RedBag")
    private Object RedBag;

    /**
     * @see List<OpqImages> 图像
     */
    @JSONField(name = "Images")
    private List<OpqImages> Images;
  }
}
